MACHINE LEARNING - BOOTSTRAPPING, BAGGING, BOOSTING E RANDOM FORESTS.
Autor
João Ricardo F. de Lima
Data de Publicação
15 de abril de 2024
Bootstrapping, Bagging, Boosting e Random Forests.
1Alguns modelos preditivos costumam apresentar alta variância, outros alto viés. Nenhum destes extremos é desejável se o objetivo é maximizar a acurácia do modelo. Felizmente, ainda podemos utilizar modelos assim para tarefas preditivas, se conciliarmos com técnicas adicionais adequadas.
Aqui é mostrada as técnicas de Bootstrapping, Bagging, Boosting e Random Forests com o objetivo de aumentar o desempenho em modelos preditivos.
Bootstrapping
Bootstrapping é uma técnica estatística que permite gerar quase qualquer estatística ou estimador de interesse ao empregar a amostragem aleatória com reposição em dados observados.
A ideia desta técnica é simular múltiplos conjuntos de dados similares aos dados observados ao extrair amostras do mesmo. Cada conjunto de dados é criado ao selecionar aleatoriamente observações dos dados observados originais, com a possibilidade de que a mesma observação seja selecionada várias vezes ou nunca seja selecionada.
# Pacoteslibrary(rbcb)library(dplyr)library(tsibble)library(fabletools)library(fable)set.seed(1984)# Dadosdados <- rbcb::get_series(code =c("ipca"=433),start_date ="2010-01-01",end_date ="2024-01-01" ) |> dplyr::mutate(date = tsibble::yearmonth(date)) |> tsibble::as_tsibble(index = date)# Modelomodelo <- dados |> fabletools::model(stl = fable::AR(ipca))# Amostras de bootstrappingbootstrapping <- modelo |> fabletools::generate(new_data = dados, times =10, bootstrap_block_size =8#seleciona em blocos de 8 obs, reduz questao da autocorrelaçao da serie temporal. ) |> dplyr::select(-c(".model", "ipca"))bootstrapping
# Série originalg1 <- dados |> fabletools::autoplot(.vars = ipca, size =1) + ggplot2::labs(title ="1) Série original", y =NULL, x =NULL)# Séries simuladas de bootstrapg2 <- bootstrapping |> fabletools::autoplot(.vars = .sim) + fabletools::autolayer(object = dados, .vars = ipca, size =1) + ggplot2::guides(colour ="none") + ggplot2::labs(title ="2) Séries Bootstrap", y =NULL, x =NULL)# Previsões de bootstrapg3 <- previsao |> tsibble::update_tsibble(key = .rep) |> fabletools::autoplot(.vars = .mean) + fabletools::autolayer(object = dados, .vars = ipca, size =1) + ggplot2::guides(colour ="none") + ggplot2::labs(title ="3) Previsões Bootstrap", y =NULL, x =NULL)# Gráficolibrary(patchwork)g1 + g2 + g3 + patchwork::plot_layout(nrow =3) + patchwork::plot_annotation(title ="A técnica de Bootstrapping",caption ="**Elaboração**: analisemacro.com.br <br>**Dados**: IPCA/IBGE",theme = ggplot2::theme(plot.title = ggplot2::element_text(face ="bold", size =22, hjust =0.5),plot.caption = ggtext::element_textbox_simple() ) )
As principais vantagens da técnica de bootstrapping são:
Simplicidade de uso e implementação;
Pode ser usada para obter quase qualquer estatística ou estimador;
É mais acurada para obter intervalos de confiança do que o uso da variância amostral ou suposições de normalidade.
Bagging
Nesse sentido, a técnica de Bootstrap aggregation ou simplesmente Bagging é um procedimento de propósito geral que possibilita justamente a redução de variância de diferentes métodos de aprendizado.
Vamos introduzir o método no contexto de arvores de decisão, mas o mesmo pode ser utilizado, como dito, em diferentes métodos de aprendizado.
Relembre que dado um conjunto de \(n\) observações independentes, \(Z_1, ..., Z_n\), cada uma com variância \(\sigma^2\), a variância da média \(\bar{Z}\) será dada por \(\frac{\sigma^2}{n}\).
Ou seja, calcular a média do conjunto de observações reduz a variância.
É imediato pensar que para reduzir a variância e, portanto, aumentar a acurácia dda previsão de um determinado método estatístico de aprendizado basta pegarmos muitos conjuntos de treinamento da população, construir um modelo de previsão separado usando cada conjunto, definir e calcular a média das previsões resultantes.
Em outras palavras, nós calculamos \(\hat{f}^{1}(x), \hat{f}^{2}(x), ..., \hat{f}^{B}(x)\) usando \(B\) conjuntos de treino, calculamos a média deles de modo a obter um único modelo com baixa variância, dado por:
Isso, infelizmente, não é muito prático já que, em geral, não temos acesso a muitos conjuntos de treino. Assim, o que podemos fazer é aplicar a técnica de bootstrap, de modo a tomar diversas amostras do mesmo conjunto de treino. Assim, geraremos \(B\) diferentes conjuntos de treino. A partir daí, podemos treinar nosso método no \(b\) conjunto de treino, de modo a obter \(\hat{f}^{*b} (x)\), finalmente obtendo a média das previsões
Enquanto o método de bagging pode ser utilizado para aumentar a acurácia da previsão nos métodos de regressão, ele é particularmente útil para árvores de decisão.
Para aplicar o método à árvores de regressão, simplesmente se constrói \(B\) árvores de regressão usando \(B\) conjuntos de treino construídos através da aplicação de bagging.
Como as árvores individuais não são podadas, elas crescem bastante, tendo assim alta variância e baixo viés.
Assim, construir a média dessas árvores irá reduzir a variância.
Até aqui, o método de bagging é descrito no contexto de uma regressão, com um variável \(Y\) quantitativa. Pode-se estender o método para problemas de classificação através de diversas abordagem.
A mais simples é pensar que para um dado conjunto de teste, pode-se registrar a classe prevista por cada uma das \(B\) árvores e tomamos uma votação majoritária: a previsão que mais ocorre entre as \(B\) previsões.
Um exemplo detalhado e bem interessante da aplicação do método de bagging é mostrado abaixo.